GPU加速では、"計算最優先"の考え方を捨てなければなりません。現代の性能は メモリ管理によって決まります。これはホスト(CPU)とデバイス(GPU)間でのデータの割り当て、同期、最適化を統合的に管理することです。
1. メモリと計算のギャップ
GPUの算術演算スループット($TFLOPS$)が飛躍的に向上している一方、メモリ帯域幅($GB/s$)ははるかに遅い速度でしか成長していません。このため、実行ユニットがしばしば「空腹状態」になり、VRAMからデータが到着するのを待たなければならないギャップが生じます。結果として、 GPUプログラミングは実際にはメモリプログラミングであるのです。
2. ルーフラインモデル
このモデルは 算術強度 (FLOPs/バイト)と性能の関係を可視化します。アプリケーションは通常、以下の2つのカテゴリに分類されます:
- メモリ制限型: 帯域幅に制限される(急勾配)。
- 計算制限型: ピークのTFLOPSに制限される(水平な天井)。
3. データ移動のコスト
主なパフォーマンスのボトルネックは数学自体ではなく、1バイトをPCIeバスやHBM間で移動させる際のレイテンシとエネルギー消費です。高性能なコードはデータの滞在位置を重視し、ホストとデバイス間の転送を最小限に抑えます。
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>